package beans;

import interfaces.IUsuarioDAO;

import java.sql.Date;


import java.util.StringTokenizer;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import javax.servlet.http.HttpSession;

import persistencia.FactoriaDao;


public class Usuario {


    private int id;
    private String nombre;
    private String apellidos;
    private String dni;
    private String direccion;
    private String poblacion;
    private String provincia;
    private String pais;
    private String cpostal;
    private Date fechaalta;
    private String email;
    private String pass;
    private String confirmPass;


    public Usuario() {
        super();
        this.id = 0;
        this.nombre = "";
        this.apellidos = "";
        this.dni = "";
        this.direccion = "";
        this.poblacion = "";
        this.provincia = "";
        this.pais = "";
        this.cpostal = "";
        this.fechaalta = null;
        this.email = "";
        this.pass = "";
        this.confirmPass = "";


    }

    public Usuario(Integer id, String nombre, String apellidos, String dni,
                   String direccion, String poblacion, String provincia,
                   String pais, String cpostal, Date fechaalta, String email,
                   String pass, String confirmPass) {
        super();
        this.id = 0;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.dni = dni;
        this.direccion = direccion;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.pais = pais;
        this.cpostal = cpostal;
        this.fechaalta = fechaalta;
        this.email = email;
        this.pass = pass;
        this.confirmPass = confirmPass;
    }

    public Usuario(Integer id, String nombre, String apellidos, String dni,
                   String direccion, String poblacion, String provincia,
                   String pais, String cpostal, Date fechaalta, String email,
                   String pass) {
        super();
        this.id = 0;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.dni = dni;
        this.direccion = direccion;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.pais = pais;
        this.cpostal = cpostal;
        this.fechaalta = fechaalta;
        this.email = email;
        this.pass = pass;

        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario",this);

    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNombre() {
        return nombre;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getDni() {
        return dni;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setPoblacion(String poblacion) {
        this.poblacion = poblacion;
    }

    public String getPoblacion() {
        return poblacion;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public String getProvincia() {
        return provincia;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public String getPais() {
        return pais;
    }

    public void setCpostal(String cpostal) {
        this.cpostal = cpostal;
    }

    public String getCpostal() {
        return cpostal;
    }

    public void setFechaalta(Date fechaalta) {
        this.fechaalta = fechaalta;
    }

    public Date getFechaalta() {
        return fechaalta;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getPass() {
        return pass;
    }


    public void setConfirmPass(String confirmPass) {
        this.confirmPass = confirmPass;
    }

    public String getConfirmPass() {
        return confirmPass;
    }


    public String registro() {
        IUsuarioDAO iu = FactoriaDao.getJDBCUsuarioDAO();
        FacesContext fc = FacesContext.getCurrentInstance();
        FacesMessage message = new FacesMessage();
        String s = null;
        if (!validaDni()) {
            message.setSummary("Dni incorrecto debe usar el formato 123456789X");
            fc.addMessage("dni", message);
        } else if (iu.consultarUsuario(email)) {

            message.setSummary("Ya existe una cuenta con este email");
            fc.addMessage("email", message);
        } else {


            if (this.getPass().equals(this.getConfirmPass())) {
                iu.insertaraBD(this);
                //System.out.println("Ha insertado");
                s = "registrado";
            } else {
                message.setSummary("Las claves deben coincidir");
                fc.addMessage("pass", message);
            }
            iu.Cerrar();
        }
        return s;
    }

    public Boolean validaDni() {
        String cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
        boolean res = true;
        //Capturamos el numero y la letra del DNI
        String numero, let;

        if (dni.length() == 9) {
            numero = dni.substring(0, 8);
            let = dni.substring(8);
            int posicion = Integer.parseInt(numero) % 23;

            String letra = cadena.substring(posicion, posicion + 1);

            //Se comprueba si el DNI es correcto

            if (!letra.equals(let)) {
                res = false;
            }

        } else {
            res = false;
        }
        //numero de caracteres uncorrecto
        //Se calcula la letra correspondiente al numero del DNI

        return res;
    }

    public String logout() {
        String s = null;
        FacesContext fc = FacesContext.getCurrentInstance();
        HttpSession sesion =
            (HttpSession)fc.getExternalContext().getSession(false);
        if (sesion != null) {
            sesion.invalidate();
        }
        return "cierrasesion";
    }


}
